const { get, post } = require('../../../utils/request')
import Toast from 'tdesign-miniprogram/toast/index';

Page({
  data: {
    isEdit: false,
    id: null,
    contactName: '',
    contactPhone: '',
    region: ['', '', ''], // 使用空字符串让微信原生选择器默认选中第一项
    detailAddress: '', // 详细地址（门牌号等）
    addressDetail: '', // 完整地址（省市区+详细地址）
    isDefault: false,
    autosize: { minHeight: 100, maxHeight: 200 }, // 文本域自动大小配置
    rules: {
      contactName: [{ required: true, message: '请输入联系人姓名', type: 'error' }],
      contactPhone: [
        { required: true, message: '请输入手机号码', type: 'error' },
        { pattern: /^1[3-9]\d{9}$/, message: '手机号码格式不正确', type: 'error' }
      ],
      region: [{ required: true, message: '请选择所在地区', type: 'error' }],
      detailAddress: [{ required: true, message: '请输入详细地址', type: 'error' }]
    }
  },

  onLoad(options) {
    if (options.id) {
      this.setData({
        isEdit: true,
        id: options.id
      })
      this.getAddressDetail(options.id)
    }
  },

  // 获取地址详情
  async getAddressDetail(id) {
    wx.showLoading({ title: '加载中...' })
    try {
      const res = await get('/api/address/get/vo', { id })
      if (res.code === 0 && res.data) {
        // 拆分地址（假设addressDetail格式为"省市区详细地址"）
        const addressDetail = res.data.addressDetail || '';
        let region = ['', '', '']; // 默认值改为空字符串
        let detailAddress = '';

        // 尝试拆分地址
        if (addressDetail) {
          // 这里的拆分逻辑可能需要根据后端实际返回的地址格式进行调整
          const addressParts = this.parseAddress(addressDetail);
          if (addressParts) {
            region = addressParts.region;
            detailAddress = addressParts.detail;
          } else {
            // 如果无法拆分，则全部放在详细地址中
            detailAddress = addressDetail;
          }
        }

        this.setData({
          contactName: res.data.contactName,
          contactPhone: res.data.contactPhone,
          region: region,
          detailAddress: detailAddress,
          addressDetail: addressDetail,
          isDefault: res.data.isDefault === 1
        })
      } else {
        Toast({
          context: this,
          selector: '#t-toast',
          message: res.message || '获取地址详情失败',
          theme: 'error',
        });
      }
    } catch (error) {
      console.error('获取地址详情失败', error)
      Toast({
        context: this,
        selector: '#t-toast',
        message: '获取地址详情失败',
        theme: 'error',
      });
    } finally {
      wx.hideLoading()
    }
  },

  // 解析地址字符串
  parseAddress(addressStr) {
    // 这里使用一个简单的规则来解析地址
    // 假设格式为：省 市 区 详细地址
    // 实际应用中可能需要更复杂的解析逻辑
    try {
      const provinceCityRegex = /(.*?(省|自治区|直辖市|特别行政区))(.*?(市|自治州|地区|区划))(.*?(区|县|市|自治县|旗|海域|林区))(.*)/;
      const match = addressStr.match(provinceCityRegex);

      if (match) {
        return {
          region: [match[1], match[3], match[5]],
          detail: match[7]
        };
      }

      return null;
    } catch (e) {
      console.error('地址解析失败', e);
      return null;
    }
  },

  // 表单输入事件
  onInputChange(e) {
    const { field } = e.currentTarget.dataset
    this.setData({
      [field]: e.detail.value
    }, () => {
      if (field === 'detailAddress') {
        this.updateFullAddress();
      }
    })
  },

  // 地区选择改变
  onRegionChange(e) {
    // 微信原生picker的返回结构
    const region = e.detail.value || ['', '', ''];

    this.setData({
      region: region
    }, () => {
      this.updateFullAddress();
    });
  },

  // 地区选择取消
  onRegionCancel() {
  },

  // 打开地区选择器
  openRegionPicker() {
    // 微信原生picker会自动弹出，无需额外处理
  },

  // 更新完整地址
  updateFullAddress() {
    // 拼接省市区和详细地址
    const { region, detailAddress } = this.data;

    if (!region[0] || !region[1] || !region[2] || !detailAddress) {
      return;
    }

    const fullAddress = region.join('') + detailAddress;

    this.setData({
      addressDetail: fullAddress
    });
  },

  // 切换默认地址
  onSwitchChange(e) {
    this.setData({
      isDefault: e.detail.value
    })
  },

  // 保存地址
  async saveAddress() {
    // 表单验证
    if (!this.validateForm()) {
      return;
    }

    // 更新完整地址
    this.updateFullAddress();

    wx.showLoading({ title: '保存中...' })

    try {
      let result
      if (this.data.isEdit) {
        // 更新地址
        const updateData = {
          id: this.data.id,
          contactName: this.data.contactName,
          contactPhone: this.data.contactPhone,
          addressDetail: this.data.addressDetail,
          isDefault: this.data.isDefault ? 1 : 0
        }
        result = await post('/api/address/update', updateData)
      } else {
        // 新增地址
        const addData = {
          contactName: this.data.contactName,
          contactPhone: this.data.contactPhone,
          addressDetail: this.data.addressDetail,
          isDefault: this.data.isDefault ? 1 : 0
        }
        result = await post('/api/address/add', addData)
      }

      if (result.code === 0) {
        Toast({
          context: this,
          selector: '#t-toast',
          message: '保存成功',
          theme: 'success',
          direction: 'column',
        });

        // 延迟返回上一页
        setTimeout(() => {
          wx.navigateBack()
        }, 1000)
      } else {
        Toast({
          context: this,
          selector: '#t-toast',
          message: result.message || '保存失败',
          theme: 'error',
        });
      }
    } catch (error) {
      console.error('保存地址失败', error)
      Toast({
        context: this,
        selector: '#t-toast',
        message: '保存地址失败',
        theme: 'error',
      });
    } finally {
      wx.hideLoading()
    }
  },

  // 表单验证
  validateForm() {
    // 验证联系人
    if (!this.data.contactName) {
      Toast({
        context: this,
        selector: '#t-toast',
        message: '请输入联系人姓名',
        theme: 'error',
      });
      return false;
    }

    // 验证手机号
    if (!this.data.contactPhone) {
      Toast({
        context: this,
        selector: '#t-toast',
        message: '请输入手机号码',
        theme: 'error',
      });
      return false;
    }

    // 验证手机号格式
    const phonePattern = /^1[3-9]\d{9}$/;
    if (!phonePattern.test(this.data.contactPhone)) {
      Toast({
        context: this,
        selector: '#t-toast',
        message: '手机号码格式不正确',
        theme: 'error',
      });
      return false;
    }

    // 验证地区
    if (!this.data.region[0] || !this.data.region[1] || !this.data.region[2]) {
      Toast({
        context: this,
        selector: '#t-toast',
        message: '请选择所在地区',
        theme: 'error',
      });
      return false;
    }

    // 验证详细地址
    if (!this.data.detailAddress) {
      Toast({
        context: this,
        selector: '#t-toast',
        message: '请输入详细地址',
        theme: 'error',
      });
      return false;
    }

    return true;
  }
}) 